一、awk文本处理
awk可以处理有格式的文本,可以指定分割的符号
提取冒号分割的第一部分
1
| awk -F: '{print $1}' b.txt
|
提取第一部分并输出冒号分割的有几部分
1
| awk -F: '{print $1,NF}' b.txt
|
输出冒号分割的第一部分和最后一部分
1
| awk -F: '{print $1,$NF}' b.txt
|
显示第一部分的行号
1
| awk -F: '{print NR,$1}' b.txt
|
定位前3行的第一部分内容内容
1
| awk -F: 'NR<=3{print NR,$1}' b.txt
|
&&条件同时满足
1
| awk -F: 'NR>=3 && NR <=5{print NR,$1}' b.txt
|
||或
1
| awk -F: 'NR<=3 || NR >=5{print NR,$1}' b.txt
|
通过正则定位最后的单词并显示第一部分
1
| awk -F: '/nologin$/{print $1}' b.txt
|
先定位第一部分$1~,找出第一部分中r开头t结尾的UID($3)
1
| awk -F: '$1~/^r.*t$/{print $3}' b.txt^C
|
定位第三部分UID>=7并输出行号和第一部分的内容
1 2
| awk -F: '$3>=7{print NR,$1}' b.txt
|
-v有变量要赋值,有多个变量,用多个-v
后期可以对count变量的值进行改变
1 2
| count=7 赋值的时候不能有空格 awk -v x=$count -F: '$3>=x{print NR,$1,$4}' b.txt
|
找到第一组中是root,在’’中需要用“”进行区分
1 2
| [root@test /]# awk -F: '$1=="root"{print NR,$1,$3}' b.txt 1 root 0
|
取IP地址
awk不指定符号,默认是空格,网卡IP信息是用空格分割的

1 2 3 4 5
| ifconfig |awk 'NR==2{print $2}' 反引号代表取值 将结果赋值给ip_addr echo $ip_addr取值并显示
|

排序、去掉重复行
cut
awk是一个复杂的工具,在这里只用了它的文本编辑功能,cut是一个精简的版本
1
| cat /etc/passwd |cut -d: -f1,3
|
-d指定分割符是冒号,-f代表取的部分,取多个用逗号分开
find
1
| find / -type f 查看根下的普通文件
|
1 2 3 4 5
| find / -name "*.txt" 查看根下的txt文件 这里的文件名需要加双引号 或者 find 、-name \*.txt
|
1
| find / -size +30M 查找大于30M的文件
|
1
| find / -size +10M -size -30M 查找大于10M小于30M的文件
|
1 2 3 4 5
| find / -size +20M -f -name *.txt 可以结合起来测试 ```ymal find / -name \*.txt -type f -size +10M
|
从文件夹中的文件中找内容
1 2 3 4 5 6
| grep -rl 'root' /test -r是递归找/test 下子文件,子文件夹下的子文件中的含有root的 -l找含有root的文件名
|
shell 脚本
修改主机名脚本
修改主机名的时候引入name变量,$name取变量名,文件命名xx.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| 1. read -p "input your hostname" name 2. hostnamectl set-hostname $name `` **修改完后一定要给给脚本文件添加可执行权限** **chmod +x set-hostname.sh** ### 变量 ### 系统变量 全局变量 局部变量 ### 测试文件 ### test==[],在shell的判断中,用[] 使用man test查看帮助文档 #### 1 整数的比较 #### INTEGER1 -eq INTEGER2 INTEGER1 is equal to INTEGER2 等于 INTEGER1 -ge INTEGER2 INTEGER1 is greater than or equal to INTEGER2 大于等于 INTEGER1 -gt INTEGER2 INTEGER1 is greater than INTEGER2 大于 INTEGER1 -le INTEGER2 INTEGER1 is less than or equal to 小于等于 INTEGER 2 INTEGER1 -lt INTEGER2 小于 INTEGER1 -ne INTEGER2 不等于 例如: ```ymal [ 3 -lt 2 ]
|
echo $? 返回0代表执行成功 返回非零代表没有执行
方括号左右需要有空格
想要用符号用(())
2 与或
EXPRESSION1 -a EXPRESSION2 逻辑与
both EXPRESSION1 and EXPRESSION2 are true
EXPRESSION1 -o EXPRESSION2 逻辑或
either EXPRESSION1 or EXPRESSION2 is true
1 2
| [ 5 -gt 3 -a 5 -lt 3 ] echo $? 返回1
|
2 比较字符串
字符串的比较